package com.cskaoyan.javase._1extends._1relation;
/**
 * 继承中两个类的从属关系
 * 子类和父类有什么关系呢?
 * 继承中,子类"is-a"父类,子类可以看成是一个父类,子类可以当成父类使用
 *
 * 为什么说子类"is-a"父类?
 *      1.从实际的代码出发,可以用父类引用指向子类对象
 *          说明子类对象可以当成父类对象去使用,所以才能有这种写法
 *          所以子类"is-a"父类
 *
 *      2.从数据类型的定义的角度分析:
 *          数据类型是 一组数据 + 基于数据的操作
 *          引用数据类型类是 成员变量的集合 + 成员方法的集合
 *          子类通过继承父类，得到了父类的所有成员，从数据类型上来说，子类就覆盖了父类的成员，具有了父类的功能。
 *          子类可以当做父类去使用，也就是子类"is-a"父类。
 *
 *      3.直观的逻辑角度.
 *          Student就是Person
 *          Teacher就是Person
 *          Cat也是Animal
 *          Dog也是Animal
 *          ....
 *          直接能够看出"is-a"关系
 *          注：
 *              这种方式只能应对常见和简单的场景，实际开发很多时候没有直白的逻辑关系，
 *              就需要通过设计文档来了解相关信息。
 *
 *      当然，反过来，父类和子类有什么关系吗？父类能当子类用吗？
 *      显然不能，父类和子类没有直接关系。并且子类往往比父类功能要强大，父类不能当成子类使用~
 *
 *  我们在开发中使用继承语法, 一定要充分考虑父子类是否具有"is-a"关系,虽然继承的本质是复用成员
 *      但是没有"is-a"关系,就不应该用继承.
 *
 *
 *
 * @since 16:19
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 创建对象,创建什么对象,用什么类型引用接收
        Father f = new Father();
        Son s = new Son();

        // 但实际上有了继承后,就可以使用"父类引用指向子类对象"的形式创建对象
        Father fs = new Son();

    }
}
class Father{

}
class Son extends Father{

}